#include "taskQueue.h"
// 初始化任务队列
int taskQueueInit(taskQueue_t * pqueue)
{
    bzero(pqueue,sizeof(taskQueue_t));
    return 0;
}
// 任务队列的入队
int enQueue(taskQueue_t * pqueue,int netfd)
{
    node_t * pNew = (node_t * )calloc(1,sizeof(node_t));//创建新节点，并且该节点指针域为NULL。动态分配一块足以容纳以一个node_t类型变量的空间
    // malloc分配内存后，内存中的内容是未初始化的，可能包含任意值，而calloc分配内存后，会将所有字节初始化为零
    // malloc只有一个参数，表示要分配的总字节数，calloc有两个参数，分别表示元素数量和每个元素的大小，这样可以更方便分配数组类型的内存
    pNew->netfd = netfd;
    // 之所以考虑这种情况是以为，当队列为空时，插入元素也会影响第一个结点的指针
    if(pqueue->queuSize == 0)
    {
        pqueue->pFront = pNew;
        pqueue->pRear = pNew;
    }else{// 当队列有元素存在时
        pqueue->pRear->pNext = pNew;
        pqueue->pRear = pNew;
    }
    ++pqueue->queuSize;
    return 0;
}

// 任务队列的出队
int deQueue(taskQueue_t * pqueue)
{
    node_t * pCur = pqueue->pFront;
    pqueue->pFront = pCur->pNext;
    // 若是队列只有一个元素的时候，出队需要改变队尾指针
    if(pqueue->queuSize == 1)
    {
        pqueue->pRear = NULL;    
    }
    free(pCur);
    --pqueue->queuSize;
    return 0;
}
